#ifndef ISCENEMANAGEMENT_H_
#define ISCENEMANAGEMENT_H_
#include <vector>
#include <map>
#include "Utils.h"
#include "Camera.h"
#include "SceneNode.h"
#include "SceneObject.h"

using namespace std;
/*
*	___ ISceneManagement Header___
*
*
***************************************************************/

namespace Scene
{

	class SceneRenderer;

	class ISceneManagement : public SceneNode
	{
		private:
		
		// FLAGS: spaeter als flags implementieren
		//////////////////////////////////////////
			bool _mouseRotatesCamera;
			bool _keysMovesCamera;
		
		// Scene Daten
		//////////////////////////////////////////
			list<Camera*> _cameras;
			Camera *_currentCamera;
			
			

		protected:
			SceneRenderer* _renderer;
			
		public:
			ISceneManagement();
			virtual ~ISceneManagement();
			
			void setRenderer( SceneRenderer *renderer );
			void MouseMoved (Sint16 xDelta, Sint16 yDelta);
			void KeyLoop(Uint8* _keys);
			void RenderObject ();// from BaseRenderObject
			Camera* getCurrentCam() const;	
			
			/////////////////////////////////////////////////////
			//new methods
			
				void AddCamera( Camera *newCamera );// deprecated
				//~ //adds the new cam to the scene
				void AddRenderObject( SceneObject *newObject );		
				void DeleteSceneObject( SceneObject *existsObject );
				
				//~ //activate the given cam for the scene
				void ActivateCam( Camera *newCam );
			
			
				void WriteString( int xPos, int yPos, string str );
		
			
			///////////////////////////////VIRTUAL FUNCTIONS
			virtual void InitScene() = 0;
			virtual void PreInitScene() = 0;
			virtual void RenderBeforeBase() = 0;
			virtual void RenderAfterBase() = 0;
			virtual void UpdateFPS(float fps){};
			virtual void Timer100( ) = 0;
			
	};
};
#include "SceneRenderer.h"
/***************************************************************/
#endif
